#include "mainWidget.h"
#include "ui_mainWidget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    this->init();

    /////////////////////////////权限登录界面开始/////////////////////////////
    connect(ui->Btn_admin, &QPushButton::clicked, this, [=](){
        ui->stackedWidget_main->setCurrentIndex(Login_id);
    });
    connect(ui->Btn_loginOk, &QPushButton::clicked, this, [=](){
        ui->stackedWidget_main->setCurrentIndex(Main_id);
    });
    connect(ui->Btn_loginCancel, &QPushButton::clicked, this, [=](){
        ui->stackedWidget_main->setCurrentIndex(Main_id);
    });
    ////////////////////////////////////////权限登录界面结束////////////////////////////////////////


    /////////////////////////////配方参数界面开始/////////////////////////////
    connect(ui->Btn_formula, &QPushButton::clicked, this, [=](){
        ui->stackedWidget_main->setCurrentIndex(Formula_id);
        ui->Btn_formula->hide();
    });
    connect(ui->Btn_formulaBack, &QPushButton::clicked, this, [=](){
        ui->stackedWidget_main->setCurrentIndex(Main_id);
        ui->stackedWidget_sub->setCurrentIndex(Run_id);
        ui->Btn_formula->show();
    });
    ////////////////////////////////////////配方参数界面结束////////////////////////////////////////

    connect(ui->Btn_progSel, &QPushButton::clicked, this, [=](){
        ui->stackedWidget_main->setCurrentIndex(SubSet_id);
        ui->stackedWidget_selSet->setCurrentIndex(SetPage::Program_id);
        ProgSet_ui->showProgSelPage();
        ui->Btn_progSel->hide();
    });

    /////////////////////////////导航主界面开始/////////////////////////////
    connect(ui->Btn_RunHome, &QPushButton::clicked, this, [=](){
        ui->stackedWidget_sub->setCurrentIndex(Run_id);
        ui->Btn_formula->show();
        ui->Btn_progSel->hide();
    });
    connect(ui->Btn_TeachHome, &QPushButton::clicked, this, [=](){
        ui->stackedWidget_sub->setCurrentIndex(Teach_id);
        ui->Btn_formula->hide();
        ui->Btn_progSel->show();
    });
    connect(ui->Btn_DebugHome, &QPushButton::clicked, this, [=](){
        ui->stackedWidget_sub->setCurrentIndex(Debug_id);
        ui->Btn_formula->hide();
        ui->Btn_progSel->hide();
    });
    connect(ui->Btn_ManualHome, &QPushButton::clicked, this, [=](){
        ui->stackedWidget_sub->setCurrentIndex(Manual_id);
        ui->Btn_formula->hide();
        ui->Btn_progSel->hide();
    });
    connect(ui->Btn_SetHome, &QPushButton::clicked, this, [=](){
        ui->stackedWidget_sub->setCurrentIndex(Set_id);
        ui->Btn_formula->hide();
        ui->Btn_progSel->hide();
    });
    connect(ui->Btn_AlarmHome, &QPushButton::clicked, this, [=](){
        ui->stackedWidget_sub->setCurrentIndex(Alarm_id);
        ui->Btn_formula->hide();
        ui->Btn_progSel->hide();
    });
    ////////////////////////////////////////导航主界面结束////////////////////////////////////////

}


Widget::~Widget()
{
    delete ui;
}

void Widget::init()
{
    //开辟需要调用的子窗体空间
    RunPage_ui = new RunPage(this); //把父类窗口的指针传给子窗口
    TeachPage_ui = new TeachPage(this);
    DebugPage_ui = new DebugPage;
    ManualPage_ui = new ManualPage(this);
    SetPage_ui = new SetPage(this);
    AlarmPage_ui = new AlarmPage;
    //开辟设置功能子窗体空间
    UserSet_ui = new UserSet(this);
    SignalSet_ui = new SignalSet(this);
    SafeSet_ui = new SafeSet(this);
    SysSet_ui = new SysSet(this);
    ProgSet_ui = new ProgSet(this);
    ExFuncSet_ui = new ExFuncSet(this);
    //开辟手动界面下功能子窗体空间
    Stacking_ui = new Stacking(this);
    MemoryPoint_ui = new MemoryPoint(this);
    StackPara_ui = new StackPara(this);
    StackSet_ui = new StackSet(this);
    FreeProg_ui = new FreeProg(this);
    //开辟编程界面编辑对话框功能子窗体空间
    EditTeach_ui = new EditTeach(this);
    EditDialog_ui = new EditDialog(this);

    //将各个子窗口加入到主窗口stackedWidget_sub框架上
    ui->stackedWidget_sub->insertWidget(Run_id, RunPage_ui);
    ui->stackedWidget_sub->insertWidget(Teach_id, TeachPage_ui);
    ui->stackedWidget_sub->insertWidget(Debug_id, DebugPage_ui);
    ui->stackedWidget_sub->insertWidget(Manual_id, ManualPage_ui);
    ui->stackedWidget_sub->insertWidget(Set_id, SetPage_ui);
    ui->stackedWidget_sub->insertWidget(Alarm_id, AlarmPage_ui);
    //将各个设置子窗口加入到窗口stackedWidget_selSet框架上
    ui->stackedWidget_selSet->insertWidget(SetPage::User_id, UserSet_ui);
    ui->stackedWidget_selSet->insertWidget(SetPage::Signal_id, SignalSet_ui);
    ui->stackedWidget_selSet->insertWidget(SetPage::Safe_id, SafeSet_ui);
    ui->stackedWidget_selSet->insertWidget(SetPage::System_id, SysSet_ui);
    ui->stackedWidget_selSet->insertWidget(SetPage::Program_id, ProgSet_ui);
    ui->stackedWidget_selSet->insertWidget(SetPage::ExFunction_id, ExFuncSet_ui);
    //将码垛管理窗口和存储点窗口加入到主窗口stackedWidget_main框架上
    ui->stackedWidget_subManual->insertWidget(Stacking_id, Stacking_ui);
    ui->stackedWidget_subManual->insertWidget(MemoryPoint_id, MemoryPoint_ui);
    ui->stackedWidget_subManual->insertWidget(StackPara_id, StackPara_ui);
    ui->stackedWidget_subManual->insertWidget(StackSet_id, StackSet_ui);
    ui->stackedWidget_subManual->insertWidget(FreeProg_id, FreeProg_ui);
    //将编辑对话框子窗口加入到主窗口stackedWidget_teachDialog框架上
    ui->stackedWidget_teachDialog->insertWidget(0, EditTeach_ui);
    ui->stackedWidget_teachDialog->insertWidget(1, EditDialog_ui);

    //初始界面（运行子界面）
    ui->stackedWidget_main->setCurrentIndex(Main_id);
    ui->stackedWidget_sub->setCurrentIndex(Run_id);
    ui->Btn_progSel->hide();
    //隐藏编程界面编辑对话框
    ui->stackedWidget_teachDialog->hide();

    //将图片嵌入到登入界面的用户输入框和密码输入框上，
    QAction *actionUser = new QAction(this);
    QAction *actionCode = new QAction(this);
    actionUser->setIcon(QIcon(":/main_images/user.png"));
    actionCode->setIcon(QIcon(":/main_images/code.png"));
    //嵌入位置为最左侧
    ui->Edit_user->addAction(actionUser, QLineEdit::LeadingPosition);
    ui->Edit_code->addAction(actionCode, QLineEdit::LeadingPosition);
}

//为设置界面提供切换主界面的函数(SetPage类调用)
void Widget::changeSetPage(const int selSetPage)
{
    ui->stackedWidget_main->setCurrentIndex(SubSet_id);
    ui->stackedWidget_selSet->setCurrentIndex(selSetPage);
}

//为各设置子界面提供返回设置界面的函数(各个设置类调用)
void Widget::backSetPage()
{
    ui->stackedWidget_main->setCurrentIndex(Main_id);
    ui->stackedWidget_sub->setCurrentIndex(Set_id);
}

//为选择程序提供返回编程界面的函数(ProgSet类调用)
void Widget::backTeachPage()
{
    ui->stackedWidget_main->setCurrentIndex(Main_id);
    ui->stackedWidget_sub->setCurrentIndex(Teach_id);
    ui->Btn_progSel->show();
}

//为手动界面提供进入码垛管理界面的函数(ManualPage类调用)
void Widget::stackingPage()
{
    ui->stackedWidget_main->setCurrentIndex(subManual_id);
    ui->stackedWidget_subManual->setCurrentIndex(Stacking_id);
}

//为手动界面提供进入存储点界面的函数(ManualPage类调用)
void Widget::memoryPointPage()
{
    ui->stackedWidget_main->setCurrentIndex(subManual_id);
    ui->stackedWidget_subManual->setCurrentIndex(MemoryPoint_id);
}

//为码垛管理界面提供进入码垛参数界面的函数(Stacking类调用)
void Widget::stackParaPage()
{
    ui->stackedWidget_subManual->setCurrentIndex(StackPara_id);
}

//为码垛参数界面提供进入码垛坐标设置界面的函数(StackPara类调用)
void Widget::stackSetPage()
{
    ui->stackedWidget_subManual->setCurrentIndex(StackSet_id);
}

//为编程界面提供进入自由编程界面的函数(EditTeach类调用)
void Widget::FreeProgPage()
{
    ui->stackedWidget_main->setCurrentIndex(subManual_id);
    ui->stackedWidget_subManual->setCurrentIndex(FreeProg_id);
    ui->stackedWidget_teachDialog->hide();
    ui->Btn_progSel->hide();
}

//为手动界面的自由编程界面提供返回编程界面的函数(FreeProg类调用)
void Widget::backEditTeachPage()
{
    ui->stackedWidget_main->setCurrentIndex(Main_id);
    ui->stackedWidget_sub->setCurrentIndex(Teach_id);
    ui->stackedWidget_teachDialog->show();
    ui->Btn_progSel->show();
}

//为码垛管理界面和存储点界面提供返回手动界面的函数(MemoryPoint和Stacking类调用)
void Widget::backManualPage()
{
    ui->stackedWidget_main->setCurrentIndex(Main_id);
    ui->stackedWidget_sub->setCurrentIndex(Manual_id);
}

//为手动界面的码垛参数界面提供返回码垛管理界面的函数(StackPara类调用)
void Widget::backStackingPage()
{
    ui->stackedWidget_main->setCurrentIndex(subManual_id);
    ui->stackedWidget_sub->setCurrentIndex(Stacking_id);
}

//为手动界面的码垛坐标设置界面提供返回码垛参数界面的函数(StackSet类调用)
void Widget::backStackParaPage()
{
    ui->stackedWidget_main->setCurrentIndex(subManual_id);
    ui->stackedWidget_sub->setCurrentIndex(StackSet_id);
}

//为编程界面提供弹出对话框的函数(TeachPage类调用)
void Widget::showEditTeach(const int DialogID)
{
    EditTeach_ui->switchDialog(DialogID);   //根据编程界面按钮对应的ID切换编辑对话框的内容页面
    ui->stackedWidget_teachDialog->show();
    ui->stackedWidget_teachDialog->setCurrentIndex(0);
}

//为编程界面提供弹出编辑对话框的函数(EditTeach类调用)
void Widget::showEditDialog(const int EidtDialogID)
{
    EditDialog_ui->switchEditDialog(EidtDialogID);
    ui->stackedWidget_teachDialog->setCurrentIndex(1);
}

//为编程界面提供关闭对话框的函数(EditTeach类调用)
void Widget::editTeachEnd()
{
    ui->stackedWidget_teachDialog->hide();
}

//为编程界面提供关闭编辑对话框(回到对话框界面)的函数(EditDialog类调用)
void Widget::editTeachDialogEnd()
{
    ui->stackedWidget_teachDialog->setCurrentIndex(0);
}

void Widget::Auto()
{
    ui->Btn_auto->setEnabled(true);
    ui->Btn_manual->setEnabled(true);
    ui->Btn_stop->setText("AUTO");
    ui->Btn_stop->setDown(true);
}

void Widget::Manual()
{
    ui->Btn_auto->setEnabled(true);
    ui->Btn_manual->setEnabled(true);
    ui->Btn_stop->setText("AUTO");
    ui->Btn_stop->setDown(true);
}

void Widget::Stop()
{
    ui->Btn_auto->setEnabled(false);
    ui->Btn_manual->setEnabled(false);
    ui->Btn_stop->setText("STOP");
    ui->Btn_stop->setDown(false);
}



